Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ANGBAND: A suggestion for "lost" artifacts

32 views
Skip to first unread message

Bernd Wiebelt

unread,
Sep 8, 1993, 8:00:41 AM9/8/93
to

I think I have got a good suggestion to solve the
"lost artifact" vs. "special feeling problem".
I think you know what I mean. It's really a pain to
have to search for an artifact if there was
a special-feeling-message at that level, just
because one has to fear that Ringil could be lost
forever. The other problem is that one has to
explore the entire first level, just to assure that
he did not miss the Phial of Galadriel.

I think I have a cure for this. Well I could be wrong,
but please take your time to read this, cause I think
that fixing these things would make a "killer-app"
out of a great game.

Problem one:

Artifacts once created and not found are lost
forever.

Possible cure:

As of now, every artifact has its own boolean variable.
But in fact this is an int8u, so that there can be more
to artifacts than just "created" or "not created".
So let's have four states:
0 = not created on that level
1 = created on that level
2 = taken by player
3 = droped (sold) by player

Now, let's create an array in the source code:
int8u artifact [SN_GROND..SN_BLADETURNER] (sorry that's pascal mixed
up with c, I know it,
but I'm lazy :-)
and then let's define

#define GROND artifact [SN_GROND]
..
#define BLADETURNER artifact [SN_BLADETURNER]

and delete

int8u GROND,...,BLADETURNER.

At the moment, everything is still working, 'cause syntax for
dealing with artifacts is still the same in the rest of the code.
(GROND,..,BLADETURNER are still int8u).
The difference is: we can now refer to all artifacts by using
loop constructs:

for i=SN_GROND to SN_BLADETURNER (this is Pascal/C/whatever)
write (artifact(i))
end

This routine would be for the save-character-routine
(instead of saving write(GROND),....,write(BLADETURNER)).

But now it gets even better. Here is how we can fix the
problem of loosing non-seen-artifacts:

At the beginning, every artifact will have the flag "not created
on that level". If it get's created, this flag will switch to
"created on that level". This is what the source code does at
the moment, only namings are different.
So here comes the new code: if the players take an an artifact,
it's flag switches to "taken by player". If he drops, throws or
sells it, the flag switches to "dropped (sold) by player".
So far this only requires some minor modification to the
get-routine, the drop routine, the sell-routine and the
throw-routine (although, IMHO, artifacts should either not be
allowed to be thrown or should not dissapear when thrown
(Did you never hit the wrong key when t)hrowing?????)).

This should be as simple as:
if (taken_object=artifact) then artifact[SN_artifact]=2

Now, the real news comes in when the player leaves that level.
To allow that non-taken artifacts can reappear, all we have
to do is change all "created on that level"-flags to
"not created on that level"-flags, which can be done in
a simple loop-construct:

for (i=SN_GROND to SN_BLADETURNER)
if (artifact[i]=created on...) then artifact[i]=not created....
end

The question remains: what to do with sold or dropped items.
The simplest solution would be to never create them again, so
they are really lost. For a discussion of other options see
the end of this letter.

Oh, I forgot. Another thing to change would be the
wizard-create-routine. Anyway, how about changing it
so that artifacts can be created directly, e.g. adding
someting like [A]rtifacts to the first prompt?

Problem two: Special feelings only when long enough on
previous two levels.

Cure:

IMHO, this simply is a design-faux-pas. I see that there is
need to prevent people from going down/upstairs until they
get a special-message. On the other hand, nothing prevents them
from using some shift-direction, just spend enough turns, and
then going down/upstairs (OK, this needs more time, but it
still works). So here is my suggestion: Get the feeling for
the level after some (100,200) turns. This is more logical,
and no one must search the entire first level for the
Phial of Galadriel. This should not be too difficult to
code.

--------------------------------

OK, please forgive me if these things are not possible at all
or much too difficult to code. I don't think so, but then again
I could be totally wrong. When I searched through the source
code, I noticed, that it was neccessary to identify an artifact
weapon (e.g. to have a unique number for it, so that they could
be organized in an array). Then I noticed that there was in fact
such a number but used for something different: SN_artifact.
If I remember correct this is used to get the corresponding
string for the description of the artifact.

OK, here is something for discussion: what should be
done with a dropped(sold) artifact: easiest way is to
disable creation totally. Another idea (which is not
originally mine, I must admit) is to decrease the odds
that this artifact is created again.
I have not looked into the object creation code, but it
would be strongly undesireable if one could sell the
Phial of Galadriel a dozen times, only because it has
(among the artifacts) a high chance of beeing created.

-----------------

Okay, that's all, I hope this helps.

Oh, yes, by the way, thanks for this great game!
(In fact: thanks for those nice improvements).

Ciao Bernd.


David Reeve Sward

unread,
Sep 8, 1993, 9:05:53 AM9/8/93
to
Excerpts from netnews.rec.games.moria: 8-Sep-93 ANGBAND: A suggestion
for ".. by Bernd Wiebelt@iamk4515.m
> OK, here is something for discussion: what should be
> done with a dropped(sold) artifact: easiest way is to
> disable creation totally. Another idea (which is not
> originally mine, I must admit) is to decrease the odds
> that this artifact is created again.

If the artifact, if created on a level but not discovered by the player,
can be created again, then the artifacts that the player DOES find but
sells/gets rid of/keeps should NOT be created again. Why? The player
had it. If the player wants to keep it, drop something else.
--
David Sward swa...@cmu.edu Finger or email for PGP public key 3D567F

Sean O'Connell

unread,
Sep 8, 1993, 11:45:59 AM9/8/93
to
In <26khha$2...@iamk4515.mathematik.uni-karlsruhe.de> be...@iamk4515.mathematik.uni-karlsruhe.de writes:

>
> I think I have got a good suggestion to solve the
> "lost artifact" vs. "special feeling problem".
> I think you know what I mean. It's really a pain to
> have to search for an artifact if there was
> a special-feeling-message at that level, just
> because one has to fear that Ringil could be lost

/sigh

That's one of the things that make Angband Angband. If you want to find out
what the "special feeling" is, you've got to take the risks of getting around
some out-of-depth nasty or some killer unique and you've got to do the time and
play it smart, if there's a special feeling with no pits or ghosts then you
know you'd better identify everything lying around or take it back with you.

Artifacts are already too easy to get. By the time I reach 2000ft, almost all
of my equipment list is artifacts with plenty more sold or stored at home. If
you missed Ringil because you didn't want to take on that monster pit, then you
don't deserve it.

-------
Sean O'Connell I'm insane, but it keeps me from going crazy.
se...@hacks.arizona.edu

Death - Life's way of saying, "You can let go of your ankles now."

Tom O Breton

unread,
Sep 8, 1993, 3:26:28 PM9/8/93
to

be...@iamk4515.mathematik.uni-karlsruhe.de (Bernd Wiebelt) writes:
> Now, let's create an array in the source code:
> int8u artifact [SN_GROND..SN_BLADETURNER] (sorry that's pascal mixed
> up with c, I know it,
> but I'm lazy :-)
> and then let's define
>
> #define GROND artifact [SN_GROND]

Yes, that's good practice for homgeneous variables. BTW, say

`int8u artifact [SN_BLADETURNER-SN_GROND];'

in C.

> So here comes the new code: if the players take an an artifact,
> it's flag switches to "taken by player". If he drops, throws or
> sells it, the flag switches to "dropped (sold) by player".

> [...]


> This should be as simple as:
> if (taken_object=artifact) then artifact[SN_artifact]=2

I have just looked through the code, and something like your idea could
work. The test you want is `if(t_ptr->flags2 & TR_ARTIFACT)' where t_ptr
points to the tested object.

Minor bugfix: Where you say `SN_artifact' you mean `SN_artifact - SN_GROND'.

Tom

PS: I'll make it real easy for you:
#define is_artifact(t_ptr) (((t_ptr)->flags2 & TR_ARTIFACT) != 0)
#define artifact_num(SN_X) ((SN_X) - SN_GROND)
int8u artifact [artifact_num(SN_BLADETURNER)];


PPS: I do *not* think "lazy", but I think you don't know C very well.
It's easy to learn, though -- the compiler will scream at you whenever
you mess up syntax.

--
The Tom spreads its huge, scaly wings and soars into the sky...
(t...@world.std.com, TomB...@delphi.com)

Bernd Wiebelt

unread,
Sep 8, 1993, 4:43:56 PM9/8/93
to
Sean O'Connell (SE...@HACKS.ARIZONA.EDU) wrote:
: In <26khha$2...@iamk4515.mathematik.uni-karlsruhe.de> be...@iamk4515.mathematik.uni-karlsruhe.de writes:

: >
: > I think I have got a good suggestion to solve the
: > "lost artifact" vs. "special feeling problem".
: > I think you know what I mean. It's really a pain to
: > have to search for an artifact if there was
: > a special-feeling-message at that level, just
: > because one has to fear that Ringil could be lost

: /sigh

: That's one of the things that make Angband Angband. If you want to find out
: what the "special feeling" is, you've got to take the risks of getting around
: some out-of-depth nasty or some killer unique and you've got to do the time and
: play it smart, if there's a special feeling with no pits or ghosts then you
: know you'd better identify everything lying around or take it back with you.

: Artifacts are already too easy to get. By the time I reach 2000ft, almost all
: of my equipment list is artifacts with plenty more sold or stored at home. If
: you missed Ringil because you didn't want to take on that monster pit, then you
: don't deserve it.

Well, I must admit that this may be true, and that my suggestion
would make the game a little bit easier.
However, there are some more people complaining about that, and those
are not all newbies. Perhaps there should be some option in the game?

BTW, can you give me a tip how to get that much artifacts?
I hope you did not use 100-R->-100-R-< ????

-

Andrew Brecher

unread,
Sep 8, 1993, 7:43:58 PM9/8/93
to
Wow. Nice job and good ideas. But is there a place in the weapon info that
not only stores that an item is an artifact (that's one of the flags2, I think)
but also >which< artificat it is? If there is, I missed it.

Not counting just searching through the name string, which is icky.

-Andrew Brecher (andrew_...@brown.edu) (insert disclaimer here)

Sean O'Connell

unread,
Sep 8, 1993, 9:51:46 PM9/8/93
to
In <26lg6c$6...@iamk4515.mathematik.uni-karlsruhe.de> be...@iamk4515.mathematik.uni-karlsruhe.de writes:

> Well, I must admit that this may be true, and that my suggestion
> would make the game a little bit easier.
> However, there are some more people complaining about that, and those
> are not all newbies. Perhaps there should be some option in the game?

I wouldn't mind it being put in as an option (no suprise to anyone remembering
any of my previous postings), but "roguelike" game programs don't seem willing
to do that. With a few conditional statements and constants converted to
variables, Angband could also be used to play Moria.


> BTW, can you give me a tip how to get that much artifacts?
> I hope you did not use 100-R->-100-R-< ????

Just the opposite. Once you hit "D" range it's foolish to skip levels. Almost
all the artifacts that have ended up in my equipment list have come from
killing "D"s, including (with the current character) the amulet of Calammas,
the ring of Baharir, and Thorin (spelling butchered since I'm doing this from
memory and haven't played in about a week). Speed and Teleport Away (of any
sort) can get you through almost any monster pit, which you'll see a lot of
with a character with a high exp multiplier.

0 new messages